package com.woniu108.product.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.woniu108.carService.commos.dto.ProductInfoDto;
import com.woniu108.carService.commos.dto.UserCartDto;
import com.woniu108.product.model.ProductInfo;
import com.woniu108.product.param.*;

import java.util.List;

/**
 * <p>
 * 商品详情表 服务类
 * </p>
 *
 * @author yanxi
 * @since 2024-05-23
 */
public interface ProductInfoService extends IService<ProductInfo> {
    /**
     * 查询所有商品详情
     * @param param  商品总览id,管理员id
     * @return 商品详情dto
     */
    List<ProductInfoDto> findAllProductInfo(FindAllProductInfoParam param);
    /**
     * 查询所有正常商品详情
     * @param pItemId  商品总览id
     * @return 商品详情dto
     */
    List<ProductInfoDto> findAllNormalProductInfo(Integer pItemId);

    /**
     * 新增商品详情
     * @param param  商品详细名称,商品编号,商品价格,库存,商品描述,商品图片,管理员id
     * @return boolean值
     * @throws Exception 文件传输异常
     */
    Boolean insertProductInfo(InsertProductInfoParam param) throws Exception;

    /**
     * 修改商品详情
     * @param param 商品详细编号,商品详细名称,商品价格,库存,商品描述,管理员id
     * @return boolean值
     */
    Boolean updateProductInfo(UpdateProductInfoParam param);

    /**
     * 修改商品图片
     * @param param 商品详细编号,商品图片,管理员id
     * @return boolean值
     * @throws Exception 文件传输异常
     */
    Boolean updateProductPicture(UpdateProductPictureParam param) throws Exception;

    /**
     * 禁用商品详情
     * @param param  总览id集合,管理员id
     * @return boolean值
     */
    Boolean banProductInfo(BanProductInfoParam param);
    /**
     * 解锁商品详情
     * @param param  总览id集合,管理员id
     * @return boolean值
     */
    Boolean unlockProductInfo(UnlockProductInfoParam param);
    /**
     * 删除商品详情
     * @param param  总览id集合,管理员id
     * @return boolean值
     */
    Boolean deleteProductInfo(DeleteProductInfoParam param);

    /**
     *  订单支付成功时商品冻结量减少
     * @param param 商品id，数量
     * @return boolean值
     */

    Boolean successfulSale(SuccessfulSaleParam param);

    /**
     *  销售失败时，冻结量调回库存量
     * @param param 商品id，数量
     * @return boolean值
     */
    Boolean failedSale(FailedSaleParam param);

    /**
     * 销量增加
     * @param pInfoId 商品id
     * @return boolean值
     */

    Boolean addPInfoNum(Integer pInfoId);
    /**
     * 销量减少
     * @param pInfoId 商品id
     * @return boolean值
     */

    Boolean reducePInfoNum(Integer pInfoId);


    /**
     * 添加商品到购物车
      * @param param 商品id，数量,用户id
     * @return boolean值
     * @throws Exception redis异常
     */
    Boolean addGoodsToCart(AddGoodsToCartParam param) throws Exception;

    /**
     * 修改购物车商品数量
     * @param param 商品id，数量
     * @return boolean值
     * @throws Exception redis异常
     */
    Boolean updateGoodsNumber(UpdateGoodsNumberParam param) throws Exception;

    /**
     * 删除购物车中某个商品
     * @param pInfoId 商品id
     * @param userId 用户id
     * @return boolean值
     * @throws Exception redis异常
     */
    Boolean deleteProductInCart(Integer pInfoId, String userId) throws Exception;
    /**
     * 查询用户购物车
     * @param userId 用户id
     * @return 用户购物车商品详情
     */
    List<UserCartDto> findUserCart(String userId);

    /**
     *  下单成功时商品冻结量增加
     * @param param 商品id，数量
     * @return boolean值
     */
    Boolean successfulOrder(SuccessfulOrderParam param);

    /**
     * 通过商品详情ID查商品信息
     * @param pInfoId 商品详情ID
     * @return  商品详情
     */
    ProductInfoDto findProductInfoById(Integer pInfoId);

    /**
     * 减少冻结量
     * @param param 商品id，数量
     * @return  boolean值
     */
    Boolean submitFreezeNum(FailedSaleParam param);
}
